package ar.edu.ufasta.presupuestos.servicios.web;

import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import ar.edu.ufasta.presupuestos.logica.entidades.Cliente;
import ar.edu.ufasta.presupuestos.servicios.persistencia.PersistenceFacade;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.LoginRequest;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.LoginResponse;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.RequestPack;
import ar.edu.ufasta.presupuestos.servicios.web.netpacks.ResponsePack;

public class Login extends Protocol {

	private LoginRequest request;
	private LoginResponse response;
	
	public Login() {
		super();
		response = new LoginResponse();
	}

	@SuppressWarnings("unchecked")
	@Override
	public int execute() {
		List<Cliente> listado;
		
		Map<String,String> condicion = new Hashtable<String, String>();
		condicion.put("t1.usuario", request.getUsuario());
		condicion.put("t1.password", request.getPassword());
		
		response.setProtocol(Constantes.PROTOCOL_100);
		response.setSystemCode(Constantes.SYSTEM_CODE);
		response.setResultCode(Constantes.TRANSACTION_OK);
		try{
		listado = (List<Cliente>)PersistenceFacade.getInstance().search(Cliente.class, condicion);
		if (listado.size() != 0){
			LogFile.write("---- Transaction Result -> LOGIN OK");
			Cliente cliente = listado.get(0);
			response.setIdCliente(cliente.getIDValue().toString());
			response.setNombreCliente(cliente.getNombre()+" "+cliente.getApellido());
		}else{
			response.setResultCode(Constantes.ERROR_INVALID_USER);
			LogFile.write("---- Transaction Result -> INVALID USER");
		}
		}catch (Exception e) {
			response.setResultCode(Constantes.ERROR_SERVER_ERROR);
			LogFile.write("**** Error in MySQL queries ****");
			return -1;
		}
		return 0;
	}

	@Override
	public String getOperationMsg() {
		return "---- Received Request   -> LOGIN";
	}

	/**
	 * @return the request
	 */
	public LoginRequest getRequest() {
		return request;
	}

	/**
	 * @return the response
	 */
	public LoginResponse getResponse() {
		return response;
	}

	@Override
	public ResponsePack getRespuesta() {
		return (LoginResponse)this.response;
	}

	@Override
	public void setPedido(RequestPack request) {
		this.request = (LoginRequest)request;
		
	}

	/**
	 * @param request the request to set
	 */
	public void setRequest(LoginRequest request) {
		this.request = request;
	}

	/**
	 * @param response the response to set
	 */
	public void setResponse(LoginResponse response) {
		this.response = response;
	}



}
